/**
 * @author WRP
 */

// DIRECTIVE PARA CALCULAR O TAMANHO DO ZOOM
angular.module('resizeZoom',[]).directive('resizeZoom', function() {
		
    return {
        restrict: 'AC',
        link: function (scope, element, attrs) {
        	
        	metade   = parseInt(scope.largura/2);
        	
            element.css({
            	'position':'absolute',
            	 'width': scope.largura+"px",
            	'left':'50%',
            	'top':'50%',
                'margin-left': '-'+metade+"px" 
            });
        }
  }
});


// FACTORY COM AS FUNÇÕES DO ZOOM
angular.module('zoomDinamico',['ui.bootstrap','resizeZoom']).factory('zoomDinamico',function ($modal) {
	
	zoomDinamico          = {};
	var modalZoom         = {};
	var config            = [];
	var estiloObj         = {};
	var largura           =  0;
	var titulo            = "";
	var registros         = [];
	var funcaoPesquisa    = {};
	var funcaoRetorno     = {};
	var funcaoAtualizacao = {};
	
	zoomDinamico.abrir    = function(){
		 
		 modalZoom = $modal.open({
		      templateUrl: 'templanteZoomDinamico',   
		      controller: MyCtrlZoom
		 
		 });	
	};
	
	zoomDinamico.fechar   = function(){
		modalZoom.close();
	};
	
	zoomDinamico.setConfig = function(arrayConfig){
		config = arrayConfig;
	};
	
	zoomDinamico.getConfig = function(){
		return config;
	};
	
	zoomDinamico.setStyle = function(estilo){
		estiloObj = estilo;
	};
	
	zoomDinamico.getStyle = function(){
		return estiloObj;
	};
	
	
	zoomDinamico.setLargura = function(valorLargura){
		largura  = valorLargura;
	};
	
    zoomDinamico.getLargura = function(){
		return largura;
	};
	
	zoomDinamico.setTitulo = function(valorTitulo){
		titulo  = valorTitulo;
	};
	
    zoomDinamico.getTitulo = function(){
		return titulo;
	};
	
	zoomDinamico.setRegistros = function(arrayRegistros){
		registros  = arrayRegistros;
		funcaoAtualizacao(registros);
	};
	
    zoomDinamico.getRegistros = function(){
		return registros;
	};
	
	zoomDinamico.setFuncaoRetorno = function(funcao){
		funcaoRetorno  = funcao;
	};
	
    zoomDinamico.getFuncaoRetorno = function(){
		return funcaoRetorno;
	};
	
	zoomDinamico.setFuncaoPesquisa = function(funcao){
		funcaoPesquisa  = funcao;
	};
	
    zoomDinamico.getFuncaoPesquisa = function(){
		return funcaoPesquisa;
	};
	
	zoomDinamico.setFuncaoAtualizacao = function(funcao){
		funcaoAtualizacao = funcao;
	};
    
	return  zoomDinamico;
});


// CONTROLE 
function MyCtrlZoom ($scope,zoomDinamico,mensagem){
	 
	 $scope.dtpRegistros       	= [];
	 $scope.dtpCampos       	= [];
	 $scope.dadosTelaZoomObj    = {};
	 $scope.itemSelecionado     = [];
	 
	 $scope.estilos             = zoomDinamico.getStyle();
	 $scope.largura             = zoomDinamico.getLargura();
	 $scope.titulo              = zoomDinamico.getTitulo();
	 
	 $scope.colunas             = [];
	 
	 var configTmp              = {};
	 
	 // MONTA OS DADOS DA TELA COM BASE NO ARRAY DE CONFIGURAÇÕES
	 for(var i=0;i < zoomDinamico.getConfig().length;i++){
	 	
	 		
	 		configTmp              = zoomDinamico.getConfig()[i];
	 		
	 		var colunaTmp          = {};
	 	
	 		colunaTmp.field        = configTmp.field;
	 		colunaTmp.displayName  = configTmp.displayName;
	 		
	 		if(configTmp.width){
	 			colunaTmp.width  = configTmp.width;
	 		}
	 		
	 		if(configTmp.filtro){
	 			var campoTmp = {};
	 			campoTmp.id         = configTmp.id;
	 			campoTmp.descricao  = configTmp.displayName;
	 			$scope.dtpCampos.push(campoTmp);
	 		}
	 		
	 		$scope.colunas.push(colunaTmp);
	 }
	 
	 // SETA AS CONFIGURAÇÕES DA GRID
	 $scope.gridRegistros = { 
	    						data: 'dtpRegistros',
	    						columnDefs:$scope.colunas,			
	    						multiSelect: false,
	    						canSelectRows: false,
	    						selectedItems: $scope.itemSelecionado
	    					 };
	    					 
	    					 
	  // CHAMA A FUNÇÃO PESQUISAR  					 
	  $scope.pesquisar  = function(){
	  	
	  	    //LIMPA O FOCUS DO BOTÃO PESQUISA 
	  	    btnPesquisarRegistros.blur();
	  	
	  		var instanciaFuncao = zoomDinamico.getFuncaoPesquisa();
	  		    instanciaFuncao($scope.dadosTelaZoomObj);
	  };
	  
	  // CRIA A FUNÇÃO DE ATUALIZAÇÃO DA GRID  					 
	  $scope.atualizaGrid = function(registros){
	  	    $scope.dtpRegistros = registros;
	  };
	 
	  // SETA A FUNÇÃO DE ATUALIZAÇÃO DA GRID
	  zoomDinamico.setFuncaoAtualizacao($scope.atualizaGrid); 
	  
	  $scope.btnOk = function(){
	  	    // LIMPA O FOCUS DO BOTÃO OK
	  	    btnOkZoom.blur();
	  	    
	  		if(!$scope.gridRegistros.selectedItems[0]){
				mensagem.erro("Selecione um registro!");
	   			return;
			}
			
			// CHAMA A FUNÇÃO DE RETORNO
			var instanciaFuncaoRetorno = zoomDinamico.getFuncaoRetorno();
	  		    instanciaFuncaoRetorno($scope.gridRegistros.selectedItems[0]);	
	  };
	  
	  // FECHA O ZOOM
	  $scope.fechar = function(){
	  		zoomDinamico.fechar();
	  };					 
	 
};



